%%% Thesis Introduction --------------------------------------------------
\chapter{Introducción}
\ifpdf
    \graphicspath{{Introduction/IntroductionFigs/PNG/}{Introduction/IntroductionFigs/PDF/}{Introduction/IntroductionFigs/}}
\else
    \graphicspath{{Introduction/IntroductionFigs/EPS/}{Introduction/IntroductionFigs/}}
\fi

Los sistemas de archivos han estado presentes en el mundo de la informática desde hace muchas décadas. Principalmente, un sistema de archivos nos permite almacenar datos en un disco de una manera organizada. Existen muchos diferentes tipos de sistemas de archivo, pero parece que después de muchos años de desarrollo el paradigma básico de organización de archivos no ha podido evolucionar más allá de una organización jerárquica de directorios y archivos.

A partir de fines de los 90's y en especial desde el 2000~\cite{history:website}, empezaron a aparecer ciertas aplicaciones que permiten buscar y categorizar archivos dentro de una computadora y más adelante incluso indexar varias computadoras. También los programas que manejan música, imágenes, vídeos y otros archivos multimedia empezaron a incluir dentro de sus características indexadores y sistemas de categorización. Esto fue necesario ya que las colecciones multimedia de los usuarios empezaron a crecer a un ritmo altísimo debido a varios factores como la popularización de formatos como el mp3 o sistemas de compartición de archivos tipo P2P (peer-to-peer).

Lentamente la información de organización de los archivos fue perdiendo importancia en el sistema de archivos y cada aplicación empezó a guardar su propia información al respecto tanto que muchos programas, como la mayoría de reproductores de música, prefieren tener su propia base de datos acerca de los archivos y sus características a hacer uso de una organización jerárquica en el sistema de archivos.

Por ejemplo la aplicación iTunes de Apple tiene su propia base de datos donde guarda la información de los archivos de música que maneja, y aunque permite organizar el sistema de archivos ubicando los archivos de música en una estructura definida de directorios (\path{Artista/Album/Pista.ext}), esta organización no es obligatoria y por tanto el sistema de archivos no tiene un papel importante en la organización y categorización de los archivos.

Existen varios intentos de generar nuevos sistemas de archivos que permitan guardar metadatos acerca de los archivos para poder luego encontrarlos más fácilmente como TagFS, Tagsistant, LFS. Estos sistemas no han llegado a popularizarse en especial por que no han podido superar a los sistemas de archivos tradicionales. Los sistemas tradicionales han pasado por un período de desarrollo muy largo, lo que les ha permitido aumentar su desempeño y fiabilidad, consolidando sus algoritmos de uso de espacio de disco y organización de la jerarquía de directorios.


\section{Alcance}

Este proyecto pretende presentar una alternativa con la cual se pueda experimentar con sistemas de archivos diferentes sin necesidad de reimplementar los algoritmos de uso de disco. Esto sería posible creando una capa de adaptación que serviría de proxy al sistema de archivos que sirve de base. A esto se lo llamará un sistema de archivos proxy, es decir un sistema de archivos que en realidad no guarda ningun archivo si no que usa un sistema de archivos existente para este fin y que permite reestructurar la organización jerárquica de los archivos de una manera dinámica. Se creará un sistema base que permita construir sobre el mismo diferentes sistemas de archivos proxy de una forma modular. Se proveerá también implementaciones de cada uno de los módulos necesarios como ejemplo. Por último se escribirá un programa con una interfaz gráfica para poder escoger diferentes módulos y montar el sistema de archivos. Todo esto se hará buscando que el sistema pueda ejecutarse en múltiples plataformas.


\section{Tecnologías a ser usadas}

A continuación se detallan algunas de las tecnologías que se usarán para poder realizar este proyecto.

\subsection{Python}

Como lenguaje base para la programación se escogió Python~\cite{python:website}. Python es un lenguaje moderno que permite crear programas rápidamente. Es un lenguaje de programación interpretado pero existen extensiones que permiten compilar el código para su ejecución óptima. Para este proyecto se usará la extensión Psyco~\cite{psyco:website} que compila el código dinámicamente para que se ejecute más rápido.

\subsection{Google Code}

Para mantener el código de este proyecto se escogió usar los servicios de Google Code creando un proyecto llamado ``dejumble'' (\url{http://code.google.com/p/dejumble}) donde se podrá encontrar todo el código fuente del sistema así como el código fuente para generar esta tesis, todo publicado bajo una licencia GPLv3 ~\cite{gpl:website}. Google Code provee servicios de versionamiento basado en Subversion y almacenamiento de instaladores o paquetes. 


\subsection{FUSE}

FUSE~\cite{fuse:website} es un conjunto de una biblioteca y un módulo de kernel para varios sistemas operativos que permite escribir sistemas de archivo a nivel de usuario y no a nivel del kernel como se lo haría tradicionalmente. Tiene tanto ventajas como desventajas. Una de las mayores desventajas es el desempeño que se ve reducido debido al paso que tienen que hacer los datos y las operaciones entre el nivel del kernel y el nivel del usuario a través de la librería de FUSE. Entre las ventajas está que el sistema de archivos corre a nivel de usuario y por tanto puede acceder a información del entorno de ejecución como por ejemplo el idioma preferido del usuario y lo que significa que también puede ser usado por cualquier usuario sin necesidad de tener privilegios.

\subsection{Sistemas de archivo POSIX}

POSIX~\cite{posix:website} significa \textit{Portable Operating System Interface}. El estándar de sistemas de archivo POSIX es el IEEE Std 1003.1. Este estándar define varias estructuras de datos relacionadas con sistemas de archivos así como también estandariza la manera en que un sistema de archivos debe reaccionar frente a ciertas acciones y comandos. Define restricciones de seguridad. La mayoría de sistemas de archivos usados hoy en día en sistemas UNIX/LINUX se apegan a este estándar.

\subsection{XESAM}

XEXAM~\cite{xesam:website} significa \textit{eXtEnsible Search And Metadata specification}. Este estándar busca unificar la interfaz que usan los programas de usuario con sistemas de búsqueda de archivos. Existen varios programas como Tracker o Beagle que proveen a los usuarios con una infraestructura de búsqueda de archivos dentro de sus computadores. Cada uno de estos programas por el momento proveen interfaces gráficas y de consola para ejecutar las búsquedas, pero también implementan la interfaz XESAM para poder ser usados desde otras aplicaciones de una manera independiente.

%%% ----------------------------------------------------------------------


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../thesis"
%%% End: 
